# -*- coding: utf-8 -*-
 
import pygame, gtk,random, pygtk, sqlite3
from pygame.locals import *
from Pergunta import Pergunta
from Coordenadas import Coordenadas
from JanelaDado import JanelaDado
from JanelaDado2 import JanelaDado2
from JanelaGanhador import JanelaGanhador
from Jogador import Jogador
from ConfigJogador import ConfigJogador

pygame.init()

class Principal():
    
    def __init__(self):
        self.objConfigJogador = ConfigJogador()
        self.objConfigJogador.show()
        gtk.main()
        
        self.objCoord = Coordenadas()
        self.jogadores = []
        for x in range(0, int(self.objConfigJogador.resposta)):
            self.jogadores.append(Jogador())
            self.jogadores[x].id = x
            self.jogadores[x].Atualiza()
            
        #definindo o tamanho da tela
        self.widthScreen, self.heightScreen = 1308, 710
        self.screen = pygame.display.set_mode((self.widthScreen, self.heightScreen), 0, 32)
        pygame.display.set_caption("Game")
 
        #carregar imagem para o fundo da tela
        self.mapa = pygame.image.load("tabuleiro1.png")
        #resize background
        self.mapa = pygame.transform.scale(self.mapa, (self.widthScreen, self.heightScreen))
 
        #posição do fundo da tela
        self.mapPosition = (0, 0)      
               
        #Variavel que mostra de quem é o turno
        self.turno = 0
               
        while True:
       
            self.conn = sqlite3.connect('game')
            self.c = self.conn.cursor()
       
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.c.execute('update tb_pergunta set status = 0')
                    self.conn.commit()
                    self.c.close()
                    exit()        
               
            #copia o background
            self.screen.blit(self.mapa, self.mapPosition)
 
            #verifica as teclas pressionadas
            self.pressedKeys = pygame.key.get_pressed()  
       
            #movimentação inicial dos pinos do tabuleiro
            self.jogadores[self.turno].movimentacao = 0
            self.jogadores[self.turno].respostaCertaBonus = 0
            self.jogadores[self.turno].respostaCertaBomba = 0
       
            #realização da pergunta quando cai em casa BONUS
            if self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) != 0:
                self.objPergunta = Pergunta()
                self.jogadores[self.turno].qtdRespostaCerta = self.objPergunta.acerto
                self.jogadores[self.turno].qtdRespostaErrada = self.objPergunta.erro
                self.jogadores[self.turno].qtdRespostaCertaMod = self.objPergunta.acertoMod
                self.jogadores[self.turno].qtdRespostaErradaMod = self.objPergunta.erroMod
                self.objPergunta.show()
                gtk.main()    
                if self.objPergunta.resp == self.objPergunta.textoLido:
                    self.jogadores[self.turno].respostaCertaBonus = 1
                    self.jogadores[self.turno].qtdRespostaCerta = self.objPergunta.acerto + 1
                    self.jogadores[self.turno].qtdRespostaCertaMod = self.objPergunta.acertoMod + 1
                else:
                    self.jogadores[self.turno].respostaCertaBonus = 2
                    self.jogadores[self.turno].qtdRespostaErrada = self.objPergunta.erro + 1
                    self.jogadores[self.turno].qtdRespostaErradaMod = self.objPergunta.erroMod + 1
                self.c.execute("update tb_pergunta set qtd_acerto = ? where ci_pergunta = ?",(self.jogadores[self.turno].qtdRespostaCerta,str(self.objPergunta.cod)))
                self.c.execute("update tb_pergunta set qtd_erro = ? where ci_pergunta = ?",(self.jogadores[self.turno].qtdRespostaErrada,str(self.objPergunta.cod)))
                self.c.execute("update tb_jogador_modulo set qtd_acerto = ? where cd_modulo = ?",(self.jogadores[self.turno].qtdRespostaCertaMod,str(self.objPergunta.modulo)))
                self.c.execute("update tb_jogador_modulo set qtd_erro = ? where cd_modulo = ?",(self.jogadores[self.turno].qtdRespostaErradaMod,str(self.objPergunta.modulo)))
            #realização da pergunta quando cai em casa BOMBA  
            if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) != 0:
                self.objPergunta = Pergunta()
                self.jogadores[self.turno].qtdRespostaCerta = self.objPergunta.acerto
                self.jogadores[self.turno].qtdRespostaErrada = self.objPergunta.erro
                self.jogadores[self.turno].qtdRespostaCertaMod = self.objPergunta.acertoMod
                self.jogadores[self.turno].qtdRespostaErradaMod = self.objPergunta.erroMod
                self.objPergunta.show()
                gtk.main()    
                if self.objPergunta.resp == self.objPergunta.textoLido:
                    self.jogadores[self.turno].respostaCertaBomba = 1
                    self.jogadores[self.turno].qtdRespostaCerta = self.objPergunta.acerto + 1
                    self.jogadores[self.turno].qtdRespostaCertaMod = self.objPergunta.acertoMod + 1
                else:
                    self.jogadores[self.turno].respostaCertaBomba = 2
                    self.jogadores[self.turno].qtdRespostaErrada = self.objPergunta.erro + 1
                    self.jogadores[self.turno].qtdRespostaErradaMod = self.objPergunta.erroMod + 1
                self.c.execute("update tb_pergunta set qtd_acerto = ? where ci_pergunta = ?",(self.jogadores[self.turno].qtdRespostaCerta,str(self.objPergunta.cod)))
                self.c.execute("update tb_pergunta set qtd_erro = ? where ci_pergunta = ?",(self.jogadores[self.turno].qtdRespostaErrada,str(self.objPergunta.cod)))
                self.c.execute("update tb_jogador_modulo set qtd_acerto = ? where cd_modulo = ?",(self.jogadores[self.turno].qtdRespostaCertaMod,str(self.objPergunta.modulo)))
                self.c.execute("update tb_jogador_modulo set qtd_erro = ? where cd_modulo = ?",(self.jogadores[self.turno].qtdRespostaErradaMod,str(self.objPergunta.modulo)))
   
            #pressionando a tecla a abro a janela para realizar a movimentação após o clique no botão
            if self.pressedKeys[K_a]:
                self.objJanelaDado = JanelaDado()        
                self.objJanelaDado.show()
                gtk.main()
                self.objJanelaDado2 = JanelaDado2()        
                self.objJanelaDado2.show()
                gtk.main()
                self.jogadores[self.turno].andar(self.jogadores[self.turno].posicao+self.objJanelaDado2.numero,self.objCoord, self.screen, self.mapa, self.mapPosition, self.jogadores, self.turno)
                self.jogadores[self.turno].movimentacao = self.objJanelaDado2.numero
                self.jogadores[self.turno].posicao += self.jogadores[self.turno].movimentacao
                
                if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) == 0 and self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) == 0:                
                    self.turno = (self.turno+1)%int(self.objConfigJogador.resposta)
                    #Isso para evitar que entre nos próximos if's e que o outro personagem ande 
                    self.jogadores[self.turno].respostaCertaBonus = 0
                    self.jogadores[self.turno].respostaCertaBomba = 0
            
            #Gera o número de casas que o jogador vai andar se acertar uma Pnonus, ou errar uma bomba
            self.num = random.randint(1,3)
            
            
            if self.jogadores[self.turno].respostaCertaBonus == 1:
                self.jogadores[self.turno].andar(self.jogadores[self.turno].posicao+self.num, self.objCoord, self.screen, self.mapa, self.mapPosition, self.jogadores , self.turno)
                self.jogadores[self.turno].posicao += self.num
                #Verificaca se é para trocar o turno
                if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) == 0 and self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) == 0:                
                    self.turno = (self.turno+1)%int(self.objConfigJogador.resposta)
            elif self.jogadores[self.turno].respostaCertaBonus == 2:        
                self.jogadores[self.turno].andar( self.jogadores[self.turno].posicao-1, self.objCoord, self.screen, self.mapa, self.mapPosition, self.jogadores , self.turno)
                self.jogadores[self.turno].posicao -= 1
                #Verificaca se é para trocar o turno
                if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) == 0 and self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) == 0:                
                    self.turno = (self.turno+1)%int(self.objConfigJogador.resposta)   
            elif self.jogadores[self.turno].respostaCertaBomba == 1:
                self.jogadores[self.turno].andar( self.jogadores[self.turno].posicao+1,self.objCoord, self.screen, self.mapa, self.mapPosition, self.jogadores , self.turno)
                self.jogadores[self.turno].posicao += 1
                #Verificaca se é para trocar o turno
                if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) == 0 and self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) == 0:                
                    self.turno = (self.turno+1)%int(self.objConfigJogador.resposta)
            elif self.jogadores[self.turno].respostaCertaBomba == 2:
                self.jogadores[self.turno].andar( self.jogadores[self.turno].posicao-self.num, self.objCoord, self.screen, self.mapa, self.mapPosition, self.jogadores , self.turno)        
                self.jogadores[self.turno].posicao -= self.num
                #Verificaca se é para trocar o turno
                if self.objCoord.listBomba.count(self.jogadores[self.turno].posicao) == 0 and self.objCoord.listBonus.count(self.jogadores[self.turno].posicao) == 0:                
                    self.turno = (self.turno+1)%int(self.objConfigJogador.resposta)
                
       
            if self.jogadores[self.turno].posicao >= 76:
                self.objGanhador = JanelaGanhador()
                self.objGanhador.show()
                gtk.main()
                self.c.execute('update tb_pergunta set status = 0')
                self.conn.commit()
                self.c.close()
                exit()
            else:
                #Coloca o nome do jogador
                self.Font = pygame.font.Font(None,20)
                self.Font.set_italic(True)
                self.Font.set_bold(True)
                self.Text = self.Font.render("JOG 1",12,(0,0,255))
                self.screen.blit(self.Text,(1150,25))
                
                for x in range(len(self.jogadores)):    
                    #colocar a image no centro da tela
                    self.jogadores[x].PosicaoJog1.x = self.objCoord.list[self.jogadores[x].posicao][0]+self.jogadores[x].deslocX
                    self.jogadores[x].PosicaoJog1.y = self.objCoord.list[self.jogadores[x].posicao][1]+self.jogadores[x].deslocY           
                    #colocando a imagem na tela
                    self.screen.blit(self.jogadores[x].ImagemJog1, self.jogadores[x].PosicaoJog1)
                    #atualizando a tela
                
                pygame.display.flip()
                        
                self.conn.commit()
                self.c.close()
                
if __name__ == "__main__":
    a = Principal()
    a.show()             